<?php

/**
 * Controlador de la entidad Paradas
 *
 * En este controlador están almacenados los metodos para la
 * administración de las paradas del sistema. Incluyendo creación,
 * edición, borrado y visualización de las mismas.
 *
 *
 * Desarrollado por la Escuela de Ingeniería de Antioquia
 *
 *
 * @link          http://cakephp.org CakePHP(tm) Project
 * @package       miBusWeb.Controller
 * @fecha         2013-07-16
 * @fecha_mod	  2013-07-21
 * @cake		  CakePHP(tm) v 0.10.0.0
 */
App::uses('AppController', 'Controller');

class ParadasController extends AppController {

    /**
     * Componennte de sesion de cake
     *
     * En este archivo se usa la sesión para poder usar la función setFlash
     *
     * @var array(string)
     */
    public $components = array('Session');

    /**
     * Nombre del modelo
     *
     * Nombre del modelo para un alias las consultas y busquedas, ingresos y
     * otras interacciones con la base de datos.
     *
     * @var string
     */
    public $name = "Paradas";

    /**
     * Modelos que utiliza
     *
     * Los modelos que usa el controller. Por defecto
     * cake usa el singular basado en el nombre del modelo,
     * pero por asuntos del idioma siempre se ingresa el modelo
     * para evitar posibles problemas.
     *
     * @var array(string)
     */
    public $uses = array('Parada');

    /**
     * Action por defecto para las paradas
     *
     * Este es el metodo base de las paradas, en este metodo
     * se buscan las paradas almacendas en el sistema y se
     * devuelven a la vista para que el usuario pueda realizar
     * acciones sobre ellas
     *
     * @return void
     */
    public function index() {

    }

    public function retrieve_all() {
        if ($this->request->is('ajax')) {
            $data = $this->request->data;

            foreach ($data['order'] as $i => $order) {
                $data['order'][$i] = array(
                    'column' => $data['columns'][$data['order'][$i]['column']]['data'],
                    'direction' => strtoupper($data['order'][$i]['dir'])
                );
            }

            $filter = array();
            foreach ($data['columns'] as $i => $column) {
                if ($column['searchable'] === "true" && !empty($column['search']['value'])) {
                    $filter[] = array(
                        'column' => $column['name'],
                        'value' => $column['search']['value']
                    );
                }
            }

            $models = $this->Parada->findAll($start = $data['start'], $length = $data['length'], $order = $data['order'], $filter);
            $totalWithFilter = $this->Parada->findCountAll($filter);
            $total = $this->Parada->findCountAll();

            $this->set(array(
                'draw' => $data['draw'],
                'results' => $models,
                'recordsTotal' => $total,
                'recordsFiltered' => $totalWithFilter
            ));
            $this->set('_serialize', array('results', 'recordsTotal', 'draw', 'recordsFiltered'));
        } else {
            $this->autoRender = false;
        }
    }

    /**
     * Consultar la información de una parada especifica
     *
     * En este metodo se busca la parada según el parametro de
     * entrada $id, si dicho parametro es nulo o si no se encuentra
     * una parada con ese identificador asociado se devulve un error.
     * por otro lado si se encuentra la parada se devuelve su
     * información a la vista para que sea procesada.
     *
     *
     * @param int $id identifiacador de la parada que se va a buscar.
     * @return void
     */
    public function ver($id = null) {
        if (!$id) {
            throw new NotFoundException(__('parada inválida'));
        }

        $parada = $this->Parada->findByid_parada($id);
        if (!$parada) {
            $this->Session->setFlash('su parada es inválida');
            throw new NotFoundException(__('parada inválida'));
        }
        $this->set('parada', $parada);
    }

    /**
     * Adiciona una nueva parada
     *
     * Este metodo adiciona una nueva parada a la base de datos
     *
     * La función verifica que el request es un post, de esa
     * se da cuenta si se esta guardando una parada nueva o si
     * simplemente se esta haciendo un llamado a la vista de
     * este action. Se adicionan los campos de auditoría, y se
     * verifica si la parada fue almacenada correctamente.
     *
     * @return void
     */
    public function agregar() {
        if ($this->request->is('post')) {
            $this->Parada->create();
            if ($this->Parada->save($this->request->data)) {
                $this->Session->setFlash('su parada ha sido guardada');
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash('su parada no ha sido guardada');
            }
        }
    }

    /**
     * Editar una parada previamente almacenada
     *
     * Se verifica que el parametro $id no sea nulo y luego se busca la
     * parada a editar, en caso de tener el parametro vacio o de no
     * encontrar la parada se lanza una exception con el mensaje de
     * error correspondiente. Posteriormente se verifica si se están
     * almacenando los nuevos datos de la parada, de ser asi se guardan
     * estos nuevos datos y el metodo termina. De lo contrario se asume
     * que se esta haciendo un get de la vista de editar y por eso se
     * devuelven los datos de la parada para que sean presentados en la
     * vista de edición.
     *
     * @param int $id identifiacador de la parada que se va a editar.
     * @return void
     */
    public function editar($id = null) {
        if (!$id) {
            throw new NotFoundException(__('su parada es inválida'));
        }

        $parada = $this->Parada->findByid_parada($id);
        if (!$parada) {
            throw new NotFoundException(__('su parada es inválida'));
        }

        if ($this->request->is('post') || $this->request->is('put')) {
            $this->Parada->id = $id;
            if ($this->Parada->save($this->request->data)) {
                $this->Session->setFlash('su parada a sido actualizada');
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash('su parada no ha sido actualizada');
            }
        }

        if (!$this->request->data) {
            $this->request->data = $parada;
        }
    }

    /**
     * Borra una parada de la base de datos
     *
     * Se verifica que el request no sea un get para
     * minimzar la probabilidad de errores. Luego se borra la parada
     * indicada.
     *
     * @param int $id identifiacador de la parada que se va a editar.
     * @return void
     */
    public function borrar($id) {
        if ($this->Parada->delete($id)) {
            $this->Session->setFlash('La parada con id: ' . $id . ' ha sido borrada.');
        } else {
            $this->Session->setFlash('La parada no pudo borrarse');
        }

        $this->redirect(array('action' => 'index'));
    }

}

?>